/**
 * 权限控制相关工具函数
 */

import store from '@/store'
import { Message } from 'element-ui'

/**
 * 检查是否有某个权限
 */
export function hasPermission(permission) {
  const hasAuth = store.getters['user/hasPermission'](permission)
  const roles = store.getters['user/roles'] || []
  const permissions = store.getters['user/permissions'] || []
  
  console.log(`权限检查: ${permission}`, {
    hasAuth,
    roles,
    permissions
  })
  
  return hasAuth
}

/**
 * 检查是否拥有任意一个权限
 */
export function hasAnyPermission(permissions) {
  for (const permission of permissions) {
    if (hasPermission(permission)) {
      return true
    }
  }
  return false
}

/**
 * 检查是否拥有所有权限
 */
export function hasAllPermissions(permissions) {
  for (const permission of permissions) {
    if (!hasPermission(permission)) {
      return false
    }
  }
  return true
}

/**
 * 根据角色生成权限列表
 * 注意：此方法仅在前端开发阶段使用，后端接入后应由后端提供权限列表
 */
export function generatePermissionsByRoles(roles) {
  if (!Array.isArray(roles) || roles.length === 0) {
    return []
  }
  
  if (roles.includes('admin')) {
    return ['*']
  }
  
  const rolePermissionMap = {
    'admin': ['*'],
    'manager': [
      'user:view', 'user:add', 'user:edit', 'user:delete', 'user:status', 'user:export', 'user:assign',
      'role:view', 'role:add', 'role:edit',
      'menu:view'
    ],
    'user': [
      'user:view', 'user:edit'
    ],
    'guest': [
      'user:view'
    ]
  }
  
  const permissions = new Set()
  
  roles.forEach(role => {
    const rolePermissions = rolePermissionMap[role] || []
    rolePermissions.forEach(permission => {
      permissions.add(permission)
    })
  })
  
  return Array.from(permissions)
}

/**
 * 预设权限与按钮的映射关系
 * 用于前端调试，后端接入后可移除
 */
export const permissionButtonMap = {
  'user:add': '添加用户',
  'user:edit': '编辑用户',
  'user:delete': '删除用户',
  'user:status': '修改用户状态',
  'user:export': '导出用户',
  'user:import': '导入用户',
  'user:assign': '分配角色',
  'role:add': '添加角色',
  'role:edit': '编辑角色',
  'role:delete': '删除角色',
  'role:permission': '分配权限',
  'menu:add': '添加菜单',
  'menu:edit': '编辑菜单',
  'menu:delete': '删除菜单'
} 

/**
 * 检查操作权限并处理无权限情况
 */
export function checkPermission(permission, callback, options = {}) {
  const { showMessage = true } = options
  
  const hasAuth = hasPermission(permission)
  const roles = store.getters['user/roles'] || []
  
  if (hasAuth) {
    if (typeof callback === 'function') {
      callback()
    }
    return true
  } else {
    if (showMessage) {
      console.log(roles);
      
      Message.error(`您没有"${permission}"权限，当前角色：${Array.isArray(roles) ? roles.join(',') : '未知'}`)
    }
    return false
  }
} 